﻿using System;
using System.IO;
using System.Threading;
using System.Collections.Generic;
using System.ServiceProcess;
using System.Windows.Forms;
using RFServer.Drive;
using RFServer.Service;
using RFServer.ServiceWCF;
using RFServer.Monitor;
using RFServer.Interactive;
using RFServer.Functions;

namespace RFServer
{
    class Program
    {
        [STAThread]
        public static void Main()
        {
            /* Инициализация, чтение настроек соединения        */

            Setup.Initialize();

            /* Проверка аргументов командной строки             */

            switch (Setup.CommandLineArguments(Environment.GetCommandLineArgs()))
            {
                case -1 : /* Ошибка аргументов командной строки */

                    Setup.Log("[rfserver]: Usage: rfserver.exe");
                    Setup.Log("[rfserver]: Usage: rfserver.exe -setup");
                    Setup.Log("[rfserver]: Usage: rfserver.exe -insert %pathname%");
                    Setup.Log("[rfserver]: Usage: rfserver.exe -console [-d [DriveLetter]]] [-port N]");
                    Console.ReadKey();

                    break;

                case  0 : /* Запуск службы */ 

                    ServiceBase.Run(new Service.RFServer());

                    /* Возвращение сюда произойдет только после того,   */
                    /* как будет остановлена служба                     */

                    break;

                case  1 : /* Запуск приложения с консолью */

                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new InteractiveConsole());
                    
                    break;

                case 2 : /* Запуск конфигурации сервера */

                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new InteractiveSetup());

                    break;

                case 3: /* Добавление нового файла */

                    string filename = Environment.GetCommandLineArgs()[2];

                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new InteractiveInsert(filename));

                    break;
            }

            /* Сохраняем лог */

            Setup.Finilize();
        }
    }
}
